﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entidades;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace DAO
{
    public static class FuncionDAO
    {
        public static void insert(Funcion f)
        {
            SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConexionBaseDatos"].ConnectionString);
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = cn;
            try
            {
                cn.Open();
                cmd.CommandText = "insert into Funcion(id_Pelicula,id_Cine,numero_Sala,id_Horario,fecha,lugares_Libres,precio) values (@IdP,@IdC,@IdS,@IdH,@Fec,@Lug,@Pre)";
                cmd.Parameters.AddWithValue("@IdP", f.IdPelicula);
                cmd.Parameters.AddWithValue("@IdC", f.IdCine);
                cmd.Parameters.AddWithValue("@IdS", f.NumeroSala);
                cmd.Parameters.AddWithValue("@IdH", f.IdHorario);
                cmd.Parameters.AddWithValue("@Fec", f.Fecha);
                cmd.Parameters.AddWithValue("@Lug", f.LugaresLibres);
                cmd.Parameters.AddWithValue("@Pre", f.Precio);
                cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw new ApplicationException("Error al insertar el la funcion:" + ex.Message);                
            }
            finally
            {
                cn.Close();
            }

        }
        public static void update(Horario h)
        {
            SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConexionBaseDatos"].ConnectionString);
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = cn;
            try
            {
                cn.Open();
                cmd.CommandText = "update Horario set horario_inicio=@horI,horario_Fin=@horF,dia_Semana=@dia where id_Horario=@Id";
                cmd.Parameters.AddWithValue("@Id", h.Id_Horario);
                cmd.Parameters.AddWithValue("@horI", h.Horario_Inicio);
                cmd.Parameters.AddWithValue("@horF", h.Horario_Fin);
                cmd.Parameters.AddWithValue("@dia", h.Dia_Semana);
                cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw new ApplicationException("Error al actualizar el horario:" + ex.Message);
            }
            finally
            {
                cn.Close();
            }

        }
        public static DataTable cargarGrillaPelicula(int id,string orden)
        {
            SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConexionBaseDatos"].ConnectionString);
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = cn;
            DataTable dt = new DataTable();
            try
            {
                cn.Open();
                cmd.CommandText = "select f.id_Pelicula,f.id_Cine,c.nombre,f.numero_Sala,f.id_Horario,h.horario_Inicio,f.fecha from Funcion f,Horario h,Cine c where f.id_Horario=h.id_Horario and f.id_Cine=c.id_Cine and id_Pelicula=@Id";
                cmd.Parameters.AddWithValue("@Id", id);
                if (orden == "")
                    cmd.CommandText += " order by c.nombre";
                else
                {
                    cmd.CommandText += " order by " + orden;
                }
                SqlDataReader dr = cmd.ExecuteReader();
                dt.Load(dr);
            }
            catch (Exception ex)
            {
                throw new ApplicationException("Error al buscar la funcion:" + ex.Message);

            }
            finally
            {
                cn.Close();
            }
            return dt;

        }
        public static DataTable cargarGrillaCine(int id,string orden)
        {
            SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConexionBaseDatos"].ConnectionString);
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = cn;
            DataTable dt = new DataTable();
            try
            {
                cn.Open();
                cmd.CommandText = "select p.id_Pelicula,p.nombre,g.nombre,p.paisOrigen,YEAR(p.añoEstreno) as añoEstreno from Funcion f,Genero g,Pelicula p where p.id_Genero=g.id_Genero and f.id_Pelicula=p.id_Pelicula and f.id_Cine=@Id";
                cmd.Parameters.AddWithValue("@Id", id);
                if (orden == "")
                    cmd.CommandText += " order by p.nombre";
                else
                {
                    if (orden.Equals("nombre1"))
                    {
                        cmd.CommandText += " order by g.nombre";
                    }
                    else
                    {
                        if (orden.Equals("nombre"))
                        {
                            cmd.CommandText += " order by p.nombre";
                        }
                        else
                            cmd.CommandText += " order by " + orden;
                    }

                }
                SqlDataReader dr = cmd.ExecuteReader();
                dt.Load(dr);
            }
            catch (Exception ex)
            {
                throw new ApplicationException("Error al buscar la funciones:" + ex.Message);

            }
            finally
            {
                cn.Close();
            }
            return dt;

        }
        public static Funcion buscarPorID(Funcion f)
        {
            SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConexionBaseDatos"].ConnectionString);
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = cn;            
            try
            {
                cn.Open();
                cmd.CommandText = "select lugares_libres,precio from Funcion  where id_Horario=@IdH and id_Cine=@IdC and fecha=@Fecha and id_Pelicula=@IdP";
                cmd.Parameters.AddWithValue("@IdP",f.IdPelicula );
                cmd.Parameters.AddWithValue("@IdC", f.IdCine);
                cmd.Parameters.AddWithValue("@IdH", f.IdHorario);
                cmd.Parameters.AddWithValue("@Fecha", f.Fecha);
                SqlDataReader dr = cmd.ExecuteReader();
                if(dr.Read())
                {
                    f.LugaresLibres = int.Parse(dr["lugares_libres"].ToString());
                    f.Precio = double.Parse(dr["precio"].ToString());
                }
            }
            catch (Exception ex)
            {
                throw new ApplicationException("Error al buscar la funcion:" + ex.Message);

            }
            finally
            {
                cn.Close();
            }
            return f;
 
        }
        public static void updateLugares(Funcion f,int cant)
        {
            SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConexionBaseDatos"].ConnectionString);
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = cn;
            try
            {
                cn.Open();
                cmd.CommandText = "update Funcion set lugares_libres=lugares_libres - @lug where id_Pelicula=@IdP and id_Cine=@IdC and numero_Sala=@IdS and id_Horario=@IdH and fecha=@Fecha";
                cmd.Parameters.AddWithValue("@lug", cant);
                cmd.Parameters.AddWithValue("@IdP", f.IdPelicula);
                cmd.Parameters.AddWithValue("@IdC", f.IdCine);
                cmd.Parameters.AddWithValue("@IdS", f.NumeroSala);
                cmd.Parameters.AddWithValue("@IdH", f.IdHorario);
                cmd.Parameters.AddWithValue("@Fecha", f.Fecha);
                cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw new ApplicationException("Error al actualizar la funcion:" + ex.Message);
            }
            finally
            {
                cn.Close();
            }

        }
        public static void updateLugaresBaja(Funcion f, int cant)
        {
            SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConexionBaseDatos"].ConnectionString);
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = cn;
            try
            {
                cn.Open();
                cmd.CommandText = "update Funcion set lugares_libres=lugares_libres + @lug where id_Pelicula=@IdP and id_Cine=@IdC and numero_Sala=@IdS and id_Horario=@IdH and fecha=@Fecha";
                cmd.Parameters.AddWithValue("@lug", cant);
                cmd.Parameters.AddWithValue("@IdP", f.IdPelicula);
                cmd.Parameters.AddWithValue("@IdC", f.IdCine);
                cmd.Parameters.AddWithValue("@IdS", f.NumeroSala);
                cmd.Parameters.AddWithValue("@IdH", f.IdHorario);
                cmd.Parameters.AddWithValue("@Fecha", f.Fecha);
                cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw new ApplicationException("Error al actualizar la funcion:" + ex.Message);
            }
            finally
            {
                cn.Close();
            }

        }
    }
}
